home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / coding / dsp / c5xug.exe / FL_ADD.ASM < prev    next >
Encoding:
Assembly Source File  |  1991-02-21  |  3.9 KB  |  196 lines

  1. ;**************************************************************
  2. ;  
  3. ;                 fl_add.asm
  4. ;  
  5. ;                 staff
  6. ;  
  7. ;                 02-21-91
  8. ;  
  9. ;           (C) Texas Instruments Inc., 1992 
  10. ;  
  11. ;           Refer to the file 'license.txt' included with this 
  12. ;           this package for usage and license information. 
  13. ;  
  14. ;**************************************************************
  15.  
  16.     .title    "Floating Point Addition Algorithm"
  17.     .def    FL_ADD
  18.  
  19. *    INPUT FORMAT
  20. *    ============
  21. *    ----------------
  22. *    |  ALL 0 OR 1  |    SIGN WORD
  23. *    ----------------
  24. *
  25. *    ----------------
  26. *    |   16 BITS    |    EXPONENT
  27. *    ----------------
  28. *
  29. *    ----------------
  30. *    |0|   15 BITS  |    HIGH PART OF MANTISSA
  31. *    ----------------
  32. *
  33. *    ----------------
  34. *    |0| 9 BITS |-0-|    LOW PART OF MANTISSA
  35. *    ----------------
  36. *
  37. *    OUTPUT FORMAT
  38. *    =============
  39. *    SAME AS INPUT FORMAT EXCEPT THAT LOW PART OF MANTISSA HAS
  40. *    16 VALID BITS INSTEAD OF HAVING A ZERO MSB.
  41.  
  42.  
  43.  
  44.  
  45. TREG1    .set    0dh
  46.  
  47. ASIGN    .set    60h    ;Sign, exponent, high and low part of mantissa
  48. AEXP    .set    61h    ;of input number A
  49. AHI    .set    62h
  50. ALO    .set    63h
  51.  
  52. BSIGN    .set    64h    ;Sign, exponent, high and low part of mantissa
  53. BEXP    .set    65h    ;of input number B
  54. BHI    .set    66h
  55. BLO    .set    67h
  56.  
  57. CSIGN    .set    68h    ;Sign, exponent, high and low part of mantissa
  58. CEXP    .set    69h    ;of the resuting floating point number C
  59. CHI    .set    6Ah
  60. CLO    .set    6Bh
  61. DIFFEXP .set    6Ch
  62.  
  63.     .text
  64.  
  65. FL_ADD    LDP    #0        ;Initialization
  66.     SETC    SXM
  67.     MAR    *,AR0
  68.     LAR    AR0,0        ;AR0 is used by NORM instruction
  69.     LACC    ALO,1        ;Get rid of 0 MSBs in
  70.     SACL    ALO        ;low part of numbers
  71.     LACC    BLO,1
  72.     SACL    BLO
  73.  
  74. CMPEXP    LACL    BLO
  75.     ADD    BHI,16
  76.     SACB            ;AccB = BHIBLO
  77.     LACC    AEXP
  78.     SUB    BEXP
  79.     SACL    DIFFEXP     ;Save the difference
  80.     BCND    AEQB,EQ     ;If |A| == |B|
  81.     BCND    ALTB,LT     ;If |A| < |B|
  82.  
  83. AGTB    LACC    DIFFEXP     ;If |A| > |B|
  84.     SAMM    TREG1
  85.     SUB    #32
  86.     BCND    AGRT32,GEQ    ;If difference > 32
  87.     LACB            ;Acc = BHIBLO
  88.     SATL
  89.     SATH            ;Right justify BHIBLO
  90.     SACB            ;Store the result back in AccB
  91.  
  92. AEQB    LACC    ASIGN        ;Copy sign and exponent values of
  93.     SACL    CSIGN        ;A in C (i.e. the result)
  94.     LACC    AEXP
  95.     SACL    CEXP
  96.  
  97. CHKSGN    LACC    ASIGN
  98.     SUB    BSIGN
  99.     CLRC    TC        ;Clear TC flag
  100.     XC    1,LT
  101.     SETC    TC        ;Set TC flag if A<0 and B>0
  102.     BCNDD    ADNOW,EQ    ;If both A and B have same sign
  103.     LACL    ALO
  104.     ADD    AHI,16        ;Acc = AHIALO
  105.     SBB            ;Acc=A-B
  106.     XC    1,TC        ;If A<0 and B>0
  107.     NEG            ;then Acc=B-A
  108.     BCND    CZERO,EQ    ;If A-B == 0
  109.     XC    2,LT        ;If A-B < 0
  110.     SPLK    #0FFFFH,CSIGN    ; then CSIGN=-1
  111.     XC    2,GT        ;If A-B > 0
  112.     SPLK    #0,CSIGN    ; then CSIGN=0
  113.     XC    1,LT
  114.     ABS
  115.     BD    NORMAL
  116.     SACH    CHI        ;Save the result
  117.     SACL    CLO
  118.  
  119. CZERO    LACC    #0        ;If A-B == 0
  120.     SACL    CEXP        ;then result is zero
  121.     SACL    CSIGN
  122.     RETD            ;Return
  123.     SACL    CHI
  124.     SACL    CLO
  125.  
  126. ADNOW    ADDB            ;If signs are same
  127.     BCNDD    OVFLOW,OV    ;then add two numbers
  128.     SACH    CHI
  129.     SACL    CLO
  130.     BCND    CZERO,EQ
  131.  
  132. NORMAL    CPL    #0,CHI
  133.     NOP            ;Dead cycle for XC
  134.     XC    2,TC        ;If CHI is 0
  135.     LACC    CLO,16        ;then normalize only the CLO part
  136.     LAR    AR0,16        ;AR0 has exponent value
  137.     XC    2,NTC        ;If CHI != 0
  138.     LACC    CHI,16        ;Acc=CHICLO
  139.     ADDS    CLO
  140.     CLRC    SXM
  141.     XC    2,LT        ;If MSB of CLO is 1
  142.     SBRK    1        ;then shift right once
  143.     SFR            ;and decrement exponent.
  144.     SETC    SXM
  145.     RPT    #13
  146.     NORM    *+        ;Normalize
  147.  
  148. OUTPUT    SACH    CHI
  149.     SACL    CLO        ;Store the result
  150.     LACC    CEXP
  151.     SAR    AR0,CEXP
  152.     RETD            ;Return
  153.     SUB    CEXP
  154.     SACL    CEXP        ;CEXP=CEXP-AR0
  155.  
  156. OVFLOW    CLRC    SXM
  157.     SFR
  158.     SACH    CHI
  159.     SACL    CLO
  160.     LACC    CEXP
  161.     ADD    #1
  162.     SACL    CEXP
  163.  
  164. ALTB    LACC    BSIGN        ;Copy sign and exponent of B in C
  165.     SACL    CSIGN
  166.     LACC    BEXP
  167.     SACL    CEXP
  168.     LACC    DIFFEXP
  169.     NEG            ;since A-B < 0 here
  170.     SAMM    TREG1        ;No. of shifts reqd. for right-justification
  171.     SUB    #32
  172.     BCND    BGRT32,GEQ    ;difference in exponent >= 32
  173.     LACL    ALO
  174.     ADD    AHI,16
  175.     SATL
  176.     SATH            ;Right-justify ALOAHI
  177.     BD    CHKSGN        ;Jump back
  178.     SACL    ALO
  179.     SACH    AHI
  180.  
  181. BGRT32    LACC    BHI        ;If exponent of B > 32
  182.     SACL    CHI        ;then C <- B.
  183.     RETD            ;Return
  184.     LACC    BLO
  185.     SACL    CLO
  186.  
  187. AGRT32    LACC    AHI        ;If exponent of A > 32
  188.     SACL    CHI        ;then C <- A.
  189.     LACC    ALO
  190.     SACL    CLO
  191.     LACC    ASIGN
  192.     SACL    CSIGN
  193.     RETD            ;Return
  194.     LACC    AEXP
  195.     SACL    CEXP
  196.